home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Online / cnetdevice / src / include / cnet.i < prev    next >
Text File  |  2000-05-18  |  12KB  |  295 lines

  1. ;----------------------------------------------------------------------------
  2. ;             Includes for CNET CN40-BC PCMCIA network card
  3. ;----------------------------------------------------------------------------
  4. ;           Original code by Bruce Abbott (bhabbott@inhb.co.nz)
  5. ;
  6. ;    "Some PC oriented eight (8) bit cards may require you read
  7. ;     odd-byte I/O address registers at the corresponding even-byte
  8. ;     address plus 64K.  There is sufficient I/O address space
  9. ;     provided that exceeding I/O address space should not be a problem."
  10. ;
  11. ;            (extract from Autodoc 'cardresource.doc')
  12. ;
  13. ; Even byte addresses start at $a20000, odd addresses start at $a30000.
  14. ;
  15. ; History
  16. ;
  17. ;   13-7-99  - Changed ETHER_MIN_LEN from 64 to 60.
  18. ;    6-5-00  - Added new stuff to buffer management node.
  19. ;              Added dd_multicastssema to device_data.
  20. ;              Removed dd_readlist from device_data (obsolete).
  21. ;              Replaced dd_pad#? with ALIGNLONG. - HSMOD
  22. ;   18-5-00  - Modified multicast structure for ranges. - HSMOD
  23. ;
  24. ;
  25.  
  26. attrmem  = $a00000                 ; address of PCMCIA attribute memory
  27. even     = $a20300                 ; base address of even nic registers
  28. odd      = $a30300-1               ; base address of odd nic registers
  29.  
  30. ;-----------------------------------------------------------------------
  31. ; The CNET CN40-BC uses a controller chip that is compatible with
  32. ; National Semiconducter's DS8390. This is the same chip that is
  33. ; used in NE1000 and NE2000 ISA bus ethernet cards.
  34. ;
  35. ; --------------------- DS8390 registers ------------------------
  36. ; registers in bank 0
  37. nic_cr       =  0+even    ; command register        (r/w) in all banks
  38. nic_pstart   =  1+odd     ; page start               (w)
  39. nic_pstop    =  2+even    ; page stop                (w)
  40. nic_clda0    =  nic_pstop ; current local dma addr   (r)
  41. nic_bnry     =  3+odd     ; boundary pointer        (r/w)
  42. nic_clda1    =  nic_bnry  ; current local dma addr   (r)
  43. nic_tpsr     =  4+even    ; transmit page start      (w)
  44. nic_tsr      =  nic_tpsr  ; transmit status register (r)
  45. nic_tbcr0    =  5+odd     ; transmit byte count      (w)
  46. nic_ncr      =  nic_tbcr0 ; number of collisions     (r)
  47. nic_tbcr1    =  6+even    ; transmit byte count      (w)
  48. nic_fifo     =  nic_tbcr1 ; fifo contents            (r)
  49. nic_isr      =  7+odd     ; interrupt status        (r/w)
  50. nic_rsar0    =  8+even    ; remote start address     (w)
  51. nic_crda0    =  nic_rsar0 ; current remote DMA addr  (r)
  52. nic_rsar1    =  9+odd     ; remote start address     (w)
  53. nic_crda1    =  nic_rsar1 ; current remote DMA addr  (r)
  54. nic_rbcr0    = 10+even    ; remote byte count        (w)
  55. nic_rbcr1    = 11+odd     ; remote byte count        (w)
  56. nic_rcr      = 12+even    ; receive configuration    (w)
  57. nic_rsr      = nic_rcr    ; receive status           (r)
  58. nic_tcr      = 13+odd     ; transmit configuration   (w)
  59. nic_cntr0    = nic_tcr    ; tally counter            (r) frame align errors
  60. nic_dcr      = 14+even    ; data configuration       (w)
  61. nic_cntr1    = nic_dcr    ; tally counter            (r) crc errors
  62. nic_imr      = 15+odd     ; interrupt mask           (w)
  63. nic_cntr2    = nic_imr    ; tally counter            (r) missed packets
  64.  
  65. ; bank 1 and 2 registers
  66. nic_par0     =  1+odd  ; physical etheraddress   (r/w)
  67. nic_par1     =  2+even ; physical etheraddress   (r/w)
  68. nic_par2     =  3+odd  ; physical etheraddress   (r/w)
  69. nic_par3     =  4+even ; physical etheraddress   (r/w)
  70. nic_par4     =  5+odd  ; physical etheraddress   (r/w)
  71. nic_par5     =  6+even ; physical etheraddress   (r/w)
  72. nic_curr     =  7+odd  ; current page            (r/w)
  73. nic_mar0     =  8+even ; multicast etheraddress  (r/w)
  74. nic_mar1     =  9+odd  ; multicast etheraddress  (r/w)
  75. nic_mar2     = 10+even ; multicast etheraddress  (r/w)
  76. nic_mar3     = 11+odd  ; multicast etheraddress  (r/w)
  77. nic_mar4     = 12+even ; multicast etheraddress  (r/w)
  78. nic_mar5     = 13+odd  ; multicast etheraddress  (r/w)
  79. nic_mar6     = 14+even ; multicast etheraddress  (r/w)
  80. nic_mar7     = 15+odd  ; multicast etheraddress  (r/w)
  81.  
  82. ; ASIC registers in the NE2000 card
  83. nic_data     = 16+even ;  DMA port  (r/w)  16 bit
  84. nic_rst      = 31+odd  ;  card reset (r=reset, w=not)
  85.  
  86. ; DS8390 command bits
  87. DSCM_STOP    = $01 ; Stop controller
  88. DSCM_START   = $02 ; Start controller
  89. DSCM_TRANS   = $04 ; Transmit packet
  90. DSCM_RREAD   = $08 ; Remote read (read from nic memory to Amiga memory)
  91. DSCM_RWRITE  = $10 ; Remote write (write from Amiga memory to nic memory)
  92. DSCM_NODMA   = $20 ; No Remote DMA present
  93. DSCM_PG0     = $00 ; Select register bank 0
  94. DSCM_PG1     = $40 ; Select register bank 1
  95. DSCM_PG2     = $80 ; Select register bank 2
  96.  
  97. ; tansmit status register values
  98. DSTS_PTX     = $01 ; Successful packet transmit
  99. DSTS_COLL    = $02 ; Packet transmit w/ collision
  100. DSTS_COLL16  = $04 ; Packet had >16 collisions & fail
  101. DSTS_UND     = $20 ; FIFO Underrun on transmission
  102.  
  103. ; interrupt status register values
  104. DSIS_RX      = $01 ; Successful packet reception
  105. DSIS_TX      = $02 ; Successful packet transmission
  106. DSIS_RXE     = $04 ; Packet reception  w/error
  107. DSIS_TXE     = $08 ; Packet transmission  w/error
  108. DSIS_ROVRN   = $10 ; Receiver overrun in the ring
  109. DSIS_CTRS    = $20 ; Diagnostic counters need attn
  110. DSIS_RDC     = $40 ; Remote DMA Complete
  111. DSIS_RESET   = $80 ; Reset Complete
  112.  
  113. ; interrupt mask register values
  114. DSIM_PRXE    = $01 ; Packet received enable
  115. DSIM_PTXE    = $02 ; Packet transmitted enable
  116. DSIM_RXEE    = $04 ; Receive error enable
  117. DSIM_TXEE    = $08 ; Transmit error enable
  118. DSIM_OVWE    = $10 ; Overwrite warning enable
  119. DSIM_CNTE    = $20 ; Counter overflow enable
  120. DSIM_RDCE    = $40 ; Remote DMA complete enable
  121. DSIM_RESET   = $80 ; Reset Complete enable
  122.  
  123. ; Bit numbers for interrupts (same for int status and mask)
  124. DSIB_RX      = 0
  125. DSIB_TX      = 1
  126. DSIB_RXE     = 2
  127. DSIB_TXE     = 3
  128. DSIB_ROVRN   = 4
  129. DSIB_CTRS    = 5
  130. DSIB_RDC     = 6
  131. DSIB_RESET   = 7
  132.  
  133. INTMASK = $ff&~(DSIM_RESET|DSIM_RDCE) ; all ints except DMA, Reset complete
  134.  
  135.  
  136. ; data configuration register values
  137. DSDC_WTS     = $01 ; Word Transfer Select
  138. DSDC_BOS     = $02 ; Byte Order Select
  139. DSDC_LAS     = $04 ; Long Address Select
  140. DSDC_BMS     = $08 ; Burst Mode Select
  141. DSDC_AR      = $10 ; Autoinitialize Remote
  142. DSDC_FT0     = $20 ; Fifo Threshold Select
  143. DSDC_FT1     = $40 ; Fifo Threshold Select
  144.  
  145. ; receive status register values
  146. DSRS_RPC     = $01 ; Received Packet Complete
  147.  
  148. ; transmit configuration register values
  149. DSTC_CRC     = $01 ; Inhibit CRC
  150. DSTC_LB0     = $02 ; Encoded Loopback Control
  151. DSTC_LB1     = $04 ; Encoded Loopback Control
  152. DSTC_ATD     = $08 ; Auto Transmit Disable
  153. DSTC_OFST    = $10 ; Collision Offset Enable
  154.  
  155. ; receive configuration register values
  156. DSRC_SEP     = $01 ; Save error packets
  157. DSRC_AR      = $02 ; Accept Runt packets
  158. DSRC_AB      = $04 ; Accept Broadcast packets
  159. DSRC_AM      = $08 ; Accept Multicast packets
  160. DSRC_PRO     = $10 ; Promiscuous physical
  161. DSRC_MON     = $20 ; Monitor mode
  162.  
  163.  
  164. ;-------------------------------------------------------------------------
  165. ; Packet receive header, 1 per each buffer page used in receive packet.
  166. ; The nic inserts this in front of the received packet.
  167. ;
  168.  STRUCTURE prhdr,0
  169.    BYTE  prhdr_status  ; is this a good packet, same as ds0_rsr
  170.    BYTE  prhdr_nxtpg   ; next page of packet or next packet
  171.    BYTE  prhdr_sz0     ; length (lower byte)
  172.    BYTE  prhdr_sz1     ; length (upper byte)
  173.   LABEL  prhdr_sizeof
  174.  
  175. ;-------------------------------------------------------------------------
  176. ; nic has 16K of on-board RAM, from $4000 to $7fff (16 bit address)
  177. ;
  178. ; Internal DMA operations (ie. tx/rx) require the upper 8 bits of the
  179. ; address, as RAM is addressed in 256 byte pages.
  180. ;
  181. ; DMA to/from the host Amiga ("Remote DMA") requires a 16 bit word-aligned
  182. ; address
  183. ;
  184.  
  185. PKTSZ    =  $0600             ; space for biggest ethernet packet (6 pages)
  186.  
  187. TBUF     =  $4000             ; Starting location of Transmit Buffer
  188. TBUF1    =  $4000+PKTSZ       ; Another Tx Buffer (for double-buffered tx)
  189. RBUF     =  $4000+(PKTSZ*2)   ; Starting location of Receive Ring Buffer
  190. RBUFEND  =  $8000             ; Ending location of Receive Ring Buffer
  191.  
  192. ETHER_MIN_LEN = 60            ; smallest amount that nic will accept
  193. ETHER_MAX_LEN = 1536          ; largest legal amount for Ethernet
  194.  
  195. ; ethernet packet data sizes (maximum)
  196.  
  197. ETHERPKT_SIZE = 1500
  198. RAWPKT_SIZE   = 1514
  199.  
  200. ; size of our packet buffer
  201.  
  202. PKTBUF_SIZE   = 1600   ; actually only need 1536 ?
  203.  
  204. ; ethernet address bytesize
  205.  
  206. ETHER_ADDR_SIZE = 6
  207.  
  208.  
  209. ; structure of an ethernet packet
  210.  
  211.   STRUCTURE etherpacket,0
  212.    STRUCT ether_dest,ETHER_ADDR_SIZE     ;  0 destination address
  213.    STRUCT ether_src,ETHER_ADDR_SIZE      ;  6 originator  address
  214.     WORD  ether_type                     ; 12 packet type
  215.    LABEL  ether_data                     ; 14 user data (up to 1500 bytes)
  216.  
  217.  
  218. ; multicastaddress range record
  219.  
  220.   STRUCTURE multicastaddressrange,mln_size  ;  0 list node
  221.   LONG    mcastar_count                     ;  8 number of times used
  222.   STRUCT  mcastar_loweraddr,ETHER_ADDR_SIZE ; 12 multicast address lower bound
  223.   STRUCT  mcastar_upperaddr,ETHER_ADDR_SIZE ; 18 multicast address upper bound
  224.   LABEL   mcastar_sizeof                    ; 24
  225.  
  226.  
  227. ; our extension to device data
  228.  
  229.   STRUCTURE device_data,lib_size
  230.     BYTE  dd_flags                             ; various flags
  231.     BYTE  dd_flags2                            ; more flags
  232.     BYTE  dd_dcr                               ; copy of nic data config reg
  233.     BYTE  dd_rcr                               ; copy of nic rx config reg
  234.     BYTE  dd_imr                               ; copy of nic intmask register
  235.     ALIGNLONG
  236.     LONG  dd_retries                           ; tx collision count
  237.     LONG  dd_badmulticasts                     ; bad multicast count
  238.     LONG  dd_overflows                         ; nic rx buffer overflow count
  239.     LONG  dd_seglist                           ; device seglist
  240.     APTR  dd_cardres                           ; card.resource base
  241.    STRUCT dd_romstationaddress,ETHER_ADDR_SIZE ; hardware address from ROM
  242.    STRUCT dd_stationaddress,ETHER_ADDR_SIZE    ; hardware station addr used
  243.    ALIGNLONG
  244.    STRUCT dd_devicestats,s2ds_size             ; sana2devicestats
  245.    STRUCT dd_orphanlist,mlh_size               ; orphan requests
  246.    STRUCT dd_writelist,mlh_size                ; write requests
  247.    STRUCT dd_eventlist,mlh_size                ; events
  248.    STRUCT dd_bufmanlist,mlh_size               ; buffer management vectors
  249.    STRUCT dd_tracklist,mlh_size                ; tracking nodes
  250.    STRUCT dd_multicasts,mlh_size               ; multicast filters
  251.    STRUCT dd_cardhandle,cah_sizeof             ; credit card handle
  252.    ALIGNLONG
  253.    STRUCT dd_cardstatus,is_size                ; card status interrupt
  254.    ALIGNLONG
  255.    STRUCT dd_cardremoved,is_size               ; card removed interrupt
  256.    ALIGNLONG
  257.    STRUCT dd_cardinserted,is_size              ; card inserted interrupt
  258.    ALIGNLONG
  259.    STRUCT dd_txint,is_size                     ; transmit software interrupt
  260.    ALIGNLONG
  261.    STRUCT dd_rxint,is_size                     ; receive software interrupt
  262.    ALIGNLONG
  263.    STRUCT dd_multicastssema,ss_size            ; multicast list arbitration
  264.    ALIGNLONG
  265.     LABEL dd_extsize
  266.  
  267.  
  268. ; bit definitions for dd_flags
  269.  
  270.  BITDEF DD,CARDIN,0         ; card is inserted
  271.  BITDEF DD,NICUP,1          ; controller hardware is initialised
  272.  BITDEF DD,OWNED,2          ; we have ownership of card
  273.  BITDEF DD,CONFIGURED,3     ; station address is configured
  274.  BITDEF DD,ONLINE,4         ; device is online
  275.  BITDEF DD,OFFLINE,5        ; device was put offline
  276.  BITDEF DD,TX,6             ; transmit buffer is full
  277.  BITDEF DD,DEVINIT,7        ; device is initialised
  278.  
  279. ; bit definitions for dd_flags2
  280.  
  281.  BITDEF DD,MINE,0           ; exclusive mode
  282.  BITDEF DD,PROM,1           ; promiscuous mode
  283.  
  284.  
  285. ; buffer management node
  286.  
  287.   STRUCTURE bufman,mln_size
  288.   APTR   bufman_dmacopyfrombuf32
  289.   APTR   bufman_copyfrombuf
  290.   APTR   bufman_dmacopytobuf32
  291.   APTR   bufman_copytobuf
  292.   APTR   bufman_packetfilter
  293.   STRUCT bufman_rxqueue,mlh_size  ; read requests
  294.   LABEL bufman_sizeof
  295.